iT邦幫忙

2024 iThome 鐵人賽

DAY 0
0
自我挑戰組

ASP.NET Core生成網站記錄系列 第 11

DAY12-首頁優化

  • 分享至 

  • xImage
  •  

@{

  ViewData["Title"] = "myfitnesspal";

}

@{

  using var companys = new z_sqlCompanys();

  var company = companys.GetDefaultCompany();

}

 

  登出

 

 

    <img

      src="https://github.com/Cooko1209/html/blob/main/img/%E9%9B%B2%E7%AB%AF%E5%81%A5%E5%BA%B7%E7%AE%A1%E7%90%86.png?raw=true"

      alt="健康的勝利">

    準備好贏得健康的勝利了嗎?立即開始追蹤,別擔心,追蹤做起來其實不難!

   

      <a href="@Url.Action("Login" , "User" , new {area = ""})" class="button">

        會員登入 / 註冊

   

 

 

   

    了解食品和健身所能帶來的成效

   

      <a href="@Url.Action("Index" , "Analysis" , new {area = ""})" class="button">

        雲端資料記錄

     

   

 

 

   

    並養成自己受用一生的飲食習慣

   

      <a href="@Url.Action("Index" , "Shopping" , new {area = ""})" class="button">

        健康新選擇

     

   

 

@section Styles

{

 

  <link rel="stylesheet" href="@Url.Content("~/lib/ESCALE/Home/css/index.css")" />

}

緩存 GetDefaultCompany() 方法的結果以提升效能

緩存方法

  1. 使用 ASP.NET 內建的 OutputCache
    適用情境: 適合緩存整個頁面或部分頁面,當頁面內容變化不頻繁時。
    方法:
    在控制器方法上使用 [OutputCache] 屬性,設定緩存的持續時間、變異參數等。
    範例:
    C#
    [OutputCache(Duration = 3600, VaryByParam = "none")]
    public ActionResult Index()
    {
    using var companys = new z_sqlCompanys();
    var company = companys.GetDefaultCompany();
    // ... 其他邏輯
    }
    請謹慎使用程式碼。

注意: OutputCache 緩存的是整個 Action 的結果,如果只想要緩存部分資料,可能不太適合。
2. 使用分散式快取 (如 Redis, Memcached)
適用情境: 適合緩存大量資料、需要高性能的場景。
方法:
引入分散式快取的 NuGet 套件。
使用快取客戶端存取快取伺服器。
範例:
C#
using StackExchange.Redis;

// ...
private static ConnectionMultiplexer _connection;
private static IDatabase _cache;

// 初始化連線
static MyController()
{
_connection = ConnectionMultiplexer.Connect("localhost");
_cache = _connection.GetDatabase();
}

public ActionResult Index()
{
var cacheKey = "DefaultCompany";
var company = _cache.StringGet(cacheKey);

if (string.IsNullOrEmpty(company))
{
    using var companys = new z_sqlCompanys();
    company = companys.GetDefaultCompany();
    _cache.StringSet(cacheKey, company, TimeSpan.FromMinutes(5));
}
// ... 其他邏輯

}
請謹慎使用程式碼。

  1. 使用記憶體內部快取 (如 MemoryCache)
    適用情境: 適合緩存少量資料、應用程式內部使用。
    方法:
    使用 System.Runtime.Caching.MemoryCache 類別。
    範例:
    C#
    private static MemoryCache _cache = new MemoryCache(true);

public ActionResult Index()
{
var cacheKey = "DefaultCompany";
if (!_cache.Contains(cacheKey))
{
using var companys = new z_sqlCompanys();
var company = companys.GetDefaultCompany();
_cache.Set(cacheKey, company, DateTimeOffset.Now.AddMinutes(5));
}
// ... 其他邏輯
}
請謹慎使用程式碼。

注意事項
緩存失效策略: 根據資料的更新頻率,設定合理的緩存失效時間。
快取鍵的設計: 確保快取鍵的唯一性,避免快取衝突。
快取穿透: 避免頻繁查詢不存在的資料,導致快取穿透,可以使用負緩存等方式解決。
快取雪崩: 當緩存同時失效時,可能導致系統負載過高,可以使用緩存分區、緩存預熱等方式緩解。
選擇適合的緩存方式
OutputCache: 簡單易用,適合緩存整個頁面或部分頁面。
分散式快取: 適合緩存大量資料、需要高性能的場景。
記憶體內部快取: 適合緩存少量資料、應用程式內部使用。
選擇哪種緩存方式,需要根據您的具體應用場景和性能需求來決定。

其他考慮因素:

資料一致性: 如果資料需要保持高度一致性,可能需要使用更複雜的緩存失效策略。
系統複雜度: 引入緩存會增加系統的複雜性,需要謹慎設計。
建議:

逐步引入緩存: 先在部分功能上引入緩存,觀察效果,再逐步擴大緩存範圍。
監控緩存效果: 定期監控緩存命中率、緩存失效情況等,以便調整緩存策略。


上一篇
DAY11-DI和問題
下一篇
DAY13-如何設計程式特別篇
系列文
ASP.NET Core生成網站記錄31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言